#ifndef COMMONPAGE_H
#define COMMONPAGE_H

#include <QWidget>
#include"listitembox.h"
#include"musiclist.h"
#include<QMediaPlaylist>

namespace Ui {
class CommonPage;
}

//////////////////////////////////////
//我的音乐显示界面的类型/////////////////
/////////////////////////////////////

//由于不同的CommonPage页面应该显示对应的歌曲文件,要对页面信息进行分类
//不同的页面类型(用于判断该页面要保存那种类型的歌曲(我喜欢,本地,最近播放))
enum PageType
{
    LIKE_PAGE,          //我喜欢页面
    LOCAL_PAGE,         //本地下载页面
    RECENT_PAGE         //最近播放页面
};

//////////////////////////////////////
//我的音乐显示界面//////////////////////
/////////////////////////////////////

class CommonPage : public QWidget
{
    Q_OBJECT

public:
    explicit CommonPage(QWidget *parent = nullptr);
    ~CommonPage();

    //提供CommonPage的设置文本和图片的方法
    void setCommonPageUi(const QString& title,const QString& imagePath);
    //设置该页面对应的类型
    void setMuiscPageType(PageType pageType);
    //根据页面类型,把musicList(歌曲列表)保存的音乐添加到对应的页面中(只添加歌曲ID)
    void addMusicToMusicPage(MusicList& musiclist);
    //负责将歌曲信息更新到页面
    void reFresh(MusicList& musiclist);
    MusicList musicList;
    //把页面对应的歌曲列表添加到当前媒体播放列表中
    void addMusicToPlayer(MusicList& musicList,QMediaPlaylist* playList);   //musicList传参过来,根据当前页面类型,根据歌曲对象包含属性将该歌曲是否应该添加到媒体列表中
    //通过歌曲索引(下标)获取对应歌曲的Id
    QString getMusicIdByIndex(int index);
    //设置Page页面的图片
    void setImageLabel(QPixmap pixmap);
signals:
    //用于通知qqmusic,不但要修改对应Id歌曲的isLike状态,还要让其中的likePage,localPage,recentPage更新页面歌曲信息的信号
    void updataLikeMusic(bool isLike,const QString& musicId);
    //用于通知qqmusic,是哪个对应页面的点击了播放全部按钮,进行相应处理
    void playAll(PageType pageType);
    //用于通知qqmusic,是哪个对应页面的哪个Item(会发送Item对应的索引)被双击后进行播放,进行相应处理
    void playMusicByIndex(CommonPage* page,int index);

private:
    Ui::CommonPage *ui;
    //表示页面类型的说明
    PageType pageType;
    //保存不同类型页面所对应的歌曲列表(主要保存歌曲ID,以确保唯一性)
    QVector<QString> musicListOfPage;
};

#endif // COMMONPAGE_H
